// Klasa opisujaca wierzcholek
#pragma once
#include <list>
#include <map>
#include "PathFlow.h"

class Vertex
{
	
public:
	string name; //nazwa wierzcholka
	int inputSum; //suma towaru wplywajacego
	int outputSum; //suma towaru wyplywajacego
	list<Vertex*> nextVertexes; //lista wiercholkow do ktorych z danego mozna dojsc
	map<string,int> routes; //lista scierzek do danego wierzcholka
	list<std::pair<list<string>,int>> routeList;
	map<string,int> edges; //lista krawedzi dochodzacych do danego wierzcholka
	/*list<PathFlow*> inPaths;*/
	map<string,PathFlow*> inPathMap;

	Vertex();
	void setName(string newName);
	void setOutputSum(int newOutputSum);
	void setInputSum(int newInputSum);
	int getOutputSum();
	int getInputSum();
	string getName();
	void setNextVertexes(list<Vertex*> newNextVertexes);
	list<Vertex*> getNextVertexes();
	void addNextVertex(Vertex* nextVertex); //dodaj do listy "nastepnych" wierzcholkow kolejny
	map<string,int> getRoutes();
	void setRoutes(map<string,int> newRoutes);
	void addRoute(string route, int minCapacity); //dodaj do listy sciezek do danego wierzcholka kolejna
	map<string,int> getEdges();
	void setEdges(map<string,int> newEdges);
	void addEdge(string vertexName, int capacity); //dodaj krawedz laczaca sie z danym wierzcholkiem	
	void addEdge(string vertexName);
};